package com.zf.extend.static_instance_construct;

/**
 * 1、静态代码块，类加载时执行，只执行一次
 * 2、实例代码块，每次创建对象都执行一次
 * 3、构造方法，每次创建对象都执行一次
 * 的执行顺序
 */
public class StaticInstanceConstructTest {
    static {
        System.out.println("1、static block");
    }

    {
        System.out.println("2、instance block");
    }

    public StaticInstanceConstructTest() {
        System.out.println("3、construct block");
    }

    public static void main(String[] args) {
        System.out.println("第一次：单个类的 静态代码块、实例代码块、构造方法的执行顺序");
        StaticInstanceConstructTest sic1 = new StaticInstanceConstructTest();
        System.out.println("第二次：单个类的 静态代码块、实例代码块、构造方法的执行顺序");
        StaticInstanceConstructTest sic2 = new StaticInstanceConstructTest();

        System.out.println("第一次：父子类的 静态代码块、实例代码块、构造方法的执行顺序");
        SonClazz sonClazz1 = new SonClazz();

        System.out.println("第二次：父子类的 静态代码块、实例代码块、构造方法的执行顺序");
        SonClazz sonClazz2 = new SonClazz();
    }
}
